home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / PInterfaces / Start.p < prev    next >
Encoding:
Text File  |  1998-08-17  |  10.6 KB  |  317 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        Start.p
  3.  
  4.      Contains:    Start Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1987-1993, 1996-1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. }
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT Start;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __START__}
  27. {$SETC __START__ := 1}
  28.  
  29. {$I+}
  30. {$SETC StartIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33. {$IFC UNDEFINED __MACTYPES__}
  34. {$I MacTypes.p}
  35. {$ENDC}
  36. {$IFC UNDEFINED __FILES__}
  37. {$I Files.p}
  38. {$ENDC}
  39.  
  40.  
  41. {$PUSH}
  42. {$ALIGN MAC68K}
  43. {$LibExport+}
  44.  
  45. {
  46.     Important: When the major version number of kExtensionTableVersion and the value
  47.     returned by gestaltExtensionTableVersion change, it indicates that the Extension
  48.     Table startup mechanism has radically changed and code that doesn't know about
  49.     the new major version must not attempt to use the Extension Table startup
  50.     mechanism.
  51.     
  52.     Changes to the minor version number of kExtensionTableVersion indicate that the
  53.     definition of the ExtensionElement structure has been extended, but the fields
  54.     defined for previous minor versions of kExtensionTableVersion have not changed.
  55. }
  56.  
  57. CONST
  58.     kExtensionTableVersion        = $00000100;                    {  current ExtensionTable version (1.0.0)  }
  59.  
  60. { ExtensionNotification message codes }
  61.     extNotificationBeforeFirst    = 0;                            {  Before any extensions have loaded  }
  62.     extNotificationAfterLast    = 1;                            {  After all extensions have loaded  }
  63.     extNotificationBeforeCurrent = 2;                            {  Before extension at extElementIndex is loaded  }
  64.     extNotificationAfterCurrent    = 3;                            {  After extension at extElementIndex is loaded  }
  65.  
  66.  
  67. TYPE
  68.     ExtensionElementPtr = ^ExtensionElement;
  69.     ExtensionElement = RECORD
  70.         fileName:                Str31;                                    {  The file name  }
  71.         parentDirID:            LONGINT;                                {  the file's parent directory ID  }
  72.                                                                         {  and everything after ioNamePtr in the HParamBlockRec.fileParam variant  }
  73.         ioVRefNum:                INTEGER;                                {  always the real volume reference number (not a drive, default, or working dirID)  }
  74.         ioFRefNum:                INTEGER;
  75.         ioFVersNum:                SInt8;
  76.         filler1:                SInt8;
  77.         ioFDirIndex:            INTEGER;                                {  always 0 in table  }
  78.         ioFlAttrib:                SInt8;
  79.         ioFlVersNum:            SInt8;
  80.         ioFlFndrInfo:            FInfo;
  81.         ioDirID:                LONGINT;
  82.         ioFlStBlk:                UInt16;
  83.         ioFlLgLen:                LONGINT;
  84.         ioFlPyLen:                LONGINT;
  85.         ioFlRStBlk:                UInt16;
  86.         ioFlRLgLen:                LONGINT;
  87.         ioFlRPyLen:                LONGINT;
  88.         ioFlCrDat:                UInt32;
  89.         ioFlMdDat:                UInt32;
  90.     END;
  91.  
  92.     ExtensionTableHeaderPtr = ^ExtensionTableHeader;
  93.     ExtensionTableHeader = RECORD
  94.         extTableHeaderSize:        UInt32;                                    {  size of ExtensionTable header ( equal to offsetof(ExtensionTable, extElements[0]) )  }
  95.         extTableVersion:        UInt32;                                    {  current ExtensionTable version (same as returned by gestaltExtTableVersion Gestalt selector)  }
  96.         extElementIndex:        UInt32;                                    {  current index into ExtensionElement records (zero-based)  }
  97.         extElementSize:            UInt32;                                    {  size of ExtensionElement  }
  98.         extElementCount:        UInt32;                                    {  number of ExtensionElement records in table (1-based)  }
  99.     END;
  100.  
  101.     ExtensionTablePtr = ^ExtensionTable;
  102.     ExtensionTable = RECORD
  103.         extTableHeader:            ExtensionTableHeader;                    {  the ExtensionTableHeader  }
  104.         extElements:            ARRAY [0..0] OF ExtensionElement;        {  one element for each extension to load  }
  105.     END;
  106.  
  107.     ExtensionTableHandle                = ^ExtensionTablePtr;
  108. {$IFC TYPED_FUNCTION_POINTERS}
  109.     ExtensionNotificationProcPtr = PROCEDURE(message: UInt32; param: UNIV Ptr; extElement: ExtensionElementPtr);
  110. {$ELSEC}
  111.     ExtensionNotificationProcPtr = ProcPtr;
  112. {$ENDC}
  113.  
  114. {$IFC TYPED_FUNCTION_POINTERS}
  115.     ExtensionTableHandlerProcPtr = PROCEDURE(message: UInt32; param: UNIV Ptr; extTableHandle: ExtensionTableHandle);
  116. {$ELSEC}
  117.     ExtensionTableHandlerProcPtr = ProcPtr;
  118. {$ENDC}
  119.  
  120.     ExtensionNotificationUPP = UniversalProcPtr;
  121.     ExtensionTableHandlerUPP = UniversalProcPtr;
  122.  
  123. CONST
  124.     uppExtensionNotificationProcInfo = $00000FC0;
  125.     uppExtensionTableHandlerProcInfo = $00000FC0;
  126.  
  127. FUNCTION NewExtensionNotificationProc(userRoutine: ExtensionNotificationProcPtr): ExtensionNotificationUPP;
  128.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  129.     INLINE $2E9F;
  130.     {$ENDC}
  131.  
  132. FUNCTION NewExtensionTableHandlerProc(userRoutine: ExtensionTableHandlerProcPtr): ExtensionTableHandlerUPP;
  133.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  134.     INLINE $2E9F;
  135.     {$ENDC}
  136.  
  137. PROCEDURE CallExtensionNotificationProc(message: UInt32; param: UNIV Ptr; extElement: ExtensionElementPtr; userRoutine: ExtensionNotificationUPP);
  138.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  139.     INLINE $205F, $4E90;
  140.     {$ENDC}
  141.  
  142. PROCEDURE CallExtensionTableHandlerProc(message: UInt32; param: UNIV Ptr; extTableHandle: ExtensionTableHandle; userRoutine: ExtensionTableHandlerUPP);
  143.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  144.     INLINE $205F, $4E90;
  145.     {$ENDC}
  146.  
  147. TYPE
  148.     DefStartRecPtr = ^DefStartRec;
  149.     DefStartRec = RECORD
  150.         CASE INTEGER OF
  151.         0: (
  152.             sdExtDevID:            SignedByte;
  153.             sdPartition:        SignedByte;
  154.             sdSlotNum:            SignedByte;
  155.             sdSRsrcID:            SignedByte;
  156.            );
  157.         1: (
  158.             sdReserved1:        SignedByte;
  159.             sdReserved2:        SignedByte;
  160.             sdRefNum:            INTEGER;
  161.            );
  162.     END;
  163.  
  164.     DefStartPtr                            = ^DefStartRec;
  165.     DefStartPtrPtr                         = ^DefStartPtr;
  166.     DefVideoRecPtr = ^DefVideoRec;
  167.     DefVideoRec = RECORD
  168.         sdSlot:                    SignedByte;
  169.         sdsResource:            SignedByte;
  170.     END;
  171.  
  172.     DefVideoPtr                            = ^DefVideoRec;
  173.     DefOSRecPtr = ^DefOSRec;
  174.     DefOSRec = RECORD
  175.         sdReserved:                SignedByte;
  176.         sdOSType:                SignedByte;
  177.     END;
  178.  
  179.     DefOSPtr                            = ^DefOSRec;
  180. PROCEDURE GetDefaultStartup(paramBlock: DefStartPtr);
  181.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  182.     INLINE $205F, $A07D;
  183.     {$ENDC}
  184. PROCEDURE SetDefaultStartup(paramBlock: DefStartPtr);
  185.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  186.     INLINE $205F, $A07E;
  187.     {$ENDC}
  188. PROCEDURE GetVideoDefault(paramBlock: DefVideoPtr);
  189.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  190.     INLINE $205F, $A080;
  191.     {$ENDC}
  192. PROCEDURE SetVideoDefault(paramBlock: DefVideoPtr);
  193.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  194.     INLINE $205F, $A081;
  195.     {$ENDC}
  196. PROCEDURE GetOSDefault(paramBlock: DefOSPtr);
  197.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  198.     INLINE $205F, $A084;
  199.     {$ENDC}
  200. PROCEDURE SetOSDefault(paramBlock: DefOSPtr);
  201.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  202.     INLINE $205F, $A083;
  203.     {$ENDC}
  204. PROCEDURE SetTimeout(count: INTEGER);
  205. PROCEDURE GetTimeout(VAR count: INTEGER);
  206. {
  207.     InstallExtensionNotificationProc
  208.  
  209.     Installs an ExtensionNotificationUPP.
  210.  
  211.     Parameters:
  212.         extNotificationProc    The ExtensionNotificationUPP to install.
  213.  
  214.     Results:
  215.         noErr        0        The ExtensionNotificationUPP was installed.
  216.         paramErr    -50        This ExtensionNotificationUPP has already been installed.
  217.         memFullErr    -108    Not enough memory to install the ExtensionNotificationUPP.
  218. }
  219. FUNCTION InstallExtensionNotificationProc(extNotificationProc: ExtensionNotificationUPP): OSErr;
  220.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  221.     INLINE $7000, $AA7D;
  222.     {$ENDC}
  223.  
  224. {
  225.     RemoveExtensionNotificationProc
  226.  
  227.     Removes an ExtensionNotificationUPP.
  228.     
  229.     Note:    ExtensionNotificationUPPs can't call RemoveExtensionNotificationProc.
  230.  
  231.     Parameters:
  232.         extNotificationProc    The ExtensionNotificationUPP to remove.
  233.  
  234.     Results:
  235.         noErr        0        The ExtensionNotificationUPP was removed.
  236.         paramErr    -50        The ExtensionNotificationUPP was not found, or
  237.                             RemoveExtensionNotificationProc was called from within
  238.                             a ExtensionNotificationUPP (ExtensionNotificationUPPs can't
  239.                             call RemoveExtensionNotificationProc).
  240. }
  241. FUNCTION RemoveExtensionNotificationProc(extNotificationProc: ExtensionNotificationUPP): OSErr;
  242.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  243.     INLINE $7001, $AA7D;
  244.     {$ENDC}
  245.  
  246. {
  247.     InstallExtensionTableHandlerProc
  248.  
  249.     Installs an ExtensionTableHandlerUPP. Control is taken away from the system's default
  250.     handler and the ExtensionTableHandlerUPP is responsible for all changes to the
  251.     ExtensionTable (except for incrementing extElementIndex between extensions). This is
  252.     always the first handler called with extNotificationBeforeFirst and
  253.     extNotificationBeforeCurrent messages and the last handler called with
  254.     extNotificationAfterLast and extNotificationAfterCurrent messages. extElementIndex
  255.     is always incremented immediately after the ExtensionTableHandlerUPP is called with
  256.     the extNotificationAfterCurrent message.
  257.     
  258.     There can only be one ExtensionTableHandler installed.
  259.     
  260.     Warning:    The only safe time to change what ExtensionElement is at
  261.                 ExtensionTable.extElements[extElementIndex] is when your
  262.                 ExtensionTableHandlerUPP is called with the extNotificationAfterCurrent
  263.                 message. You may change the ExtensionTable or the extElementIndex at other
  264.                 times, but you must ensure that the ExtensionElement at
  265.                 ExtensionTable.extElements[extElementIndex] stays the same.
  266.                 
  267.     Note:        If the ExtensionTable or the contents of the folders included in the
  268.                 ExtensionTable are changed after installing an ExtensionTableHandler,
  269.                 RemoveExtensionTableHandlerProc cannot be called.
  270.  
  271.     Parameters:
  272.         extMgrProc            The ExtensionTableHandlerUPP to install.
  273.         extTable            A pointer to an ExtensionTableHandle where
  274.                             InstallExtensionTableHandlerProc will return the current
  275.                             ExtensionTableHandle. You don't own the handle itself and
  276.                             must not dispose of it, but you can change the extElementIndex.
  277.                             the extElementCount, and the ExtensionElements in the table.
  278.  
  279.     Results:
  280.         noErr        0        The ExtensionTableHandlerUPP was installed.
  281.         paramErr    -50        Another ExtensionTableHandlerUPP has already been installed.
  282.         memFullErr    -108    Not enough memory to install the ExtensionTableHandlerUPP.
  283. }
  284. FUNCTION InstallExtensionTableHandlerProc(extMgrProc: ExtensionTableHandlerUPP; VAR extTable: ExtensionTableHandle): OSErr;
  285.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  286.     INLINE $7002, $AA7D;
  287.     {$ENDC}
  288.  
  289. {
  290.     RemoveExtensionTableHandlerProc
  291.  
  292.     Remove an ExtensionTableUPP. Control is passed back to the default handler.
  293.  
  294.     Parameters:
  295.         extMgrProc            The ExtensionTableUPP to remove.
  296.  
  297.     Results:
  298.         noErr        0        The ExtensionTableUPP was removed.
  299.         paramErr    -50        This ExtensionTableUPP was not installed,
  300.                             or the ExtensionTable no longer matches the
  301.                             original boot ExtensionTable.
  302. }
  303. FUNCTION RemoveExtensionTableHandlerProc(extMgrProc: ExtensionTableHandlerUPP): OSErr;
  304.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  305.     INLINE $7003, $AA7D;
  306.     {$ENDC}
  307. {$ALIGN RESET}
  308. {$POP}
  309.  
  310. {$SETC UsingIncludes := StartIncludes}
  311.  
  312. {$ENDC} {__START__}
  313.  
  314. {$IFC NOT UsingIncludes}
  315.  END.
  316. {$ENDC}
  317.